package com.wangsd.web.service;

import com.wangsd.core.entity.JSONResult;
import com.wangsd.core.feature.orm.mybatis.Page;
import com.wangsd.web.model.Billaccount;
import com.wangsd.web.model.Ticket;
import com.wangsd.web.modelCustom.BillAccountCustom;
import com.wangsd.web.modelCustom.BillExcelBean;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.util.List;

public interface BillAccountService {

    /**
     * 根据条件查询所有账单
     * @return
     */
    public List<BillAccountCustom> queryBillAccountList(BillAccountCustom billaccount);

    /**
     * 根据id查询账单信息
     * @param id
     * @return
     */
    public Billaccount selectBillAccountById(Integer id);

    /**
     * 根据支付宝订单编号查询账单
     * @param tradeNo
     * @return
     */
    public Billaccount selectBillAccountByTradeNo(String tradeNo);

    /**
     * 新增账单信息
     * @param billaccount
     * @return
     */
    public boolean insertBillaccount(Billaccount billaccount);

    /**
     * 更新账单信息
     * @param billaccount
     * @return
     */
    public boolean updateBillaccount(Billaccount billaccount);

    /**
     * 删除账单
     * @param id
     * @return
     */
    public boolean deleteBillaccount(Integer id);

    /**
     * 导入账单Excel信息
     * @param
     * @return
     */
    public JSONResult importBillaccount(List<BillExcelBean> list, Integer costType);

    /**
     * 根据code查询账单缴纳金额
     * @param
     * @return
     */
    public List<BillAccountCustom> queryAmountGroupByPayType(BillAccountCustom billAccountCustom);

    /**
     * 根据code查询账单缴纳笔数
     * @param
     * @return
     */
    public List<BillAccountCustom> queryCountGroupByPayType(BillAccountCustom billAccountCustom);

    /**
     * 根据状态查询账单情况
     * @param
     * @return
     */
    public BillAccountCustom selectAllGroupByStatus(BillAccountCustom billAccountCustom);

    /**
     * 新增电子发票信息
     * @param ticket
     * @return
     */
    public boolean insertTicket(Ticket ticket);

    /**
     * 根据主键查询电子发票
     * @return
     */
    public Ticket selectTicketById(Integer id);

    /**
     * 根据开票状态查询账单
     * @param code
     * @param ticketstatus
     * @return
     */
    public List<BillAccountCustom> queryInvoiceListTicketstatus(Page<BillAccountCustom> page, BillAccountCustom query);

    /**
     * 查询账单总条数
     * @param
     * @return
     */
    Integer queryBillAccountListAccount(BillAccountCustom billAccountCustom);

    /**
     * 各种支付类型的总额
     * @param
     * @return
     */
    BillAccountCustom queryAmountGroup(BillAccountCustom billAccountCustom);
    
    /**
     * 
     * Description: 下载电子发票
     * @param billAccountCustom
     * @return
     */
    public HSSFWorkbook exportBillAccount(BillAccountCustom billAccountCustom);
    
    /**
     * 
     * Description: 下载我的账单
     * @param billAccountCustom
     * @return
     */
    public HSSFWorkbook exportBillAccountList(BillAccountCustom billAccountCustom);

    /**
     * 交易中心列表查询
     * @param
     * @return
     */
    List<BillAccountCustom> getTradeCenterList(BillAccountCustom billAccountCustom);

    int updateByPrimaryKeySelective(Billaccount record);

    /**
     * @Author:qc
     * @Description:通过id查询账单以及付款方式名称
     * @param id
     * @Date:15:30 2017/12/19
     */
    BillAccountCustom selectBillAccountAndCostTypeById(Integer id);

    /**
     * 工作表报统计
     * @param billAccountCustom
     * @return BillAccountCustom
     */
    List<BillAccountCustom> tableWorkReport(BillAccountCustom billAccountCustom);

    /**
     * 根据发票请求流水号查询账单
     * @param invoiceserialnum
     * @return
     */
    public List<Billaccount> selectBillAccountByInvoiceserialnum(String invoiceserialnum);

    /**
     * @Author:qc
     * @Description: 通过小区id查询出 账期
     * @param billAccountCustom
     * @Date:10:47 2018/1/2
     */
    List<BillAccountCustom> billAccountAcct(BillAccountCustom billAccountCustom);
}
